import os
import sys
from flask import Flask
from flask_cors import CORS
from dotenv import load_dotenv

# 添加项目根目录到Python路径
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if project_root not in sys.path:
    sys.path.insert(0, project_root)

# 导入配置和日志
from config import Config
from logger_config import get_logger

# 导入数据库
from database import init_database, create_test_user
from session_interface import CustomSessionInterface

# 导入服务层和蓝图将在create_app函数中进行，避免循环导入


# 加载环境变量
load_dotenv()

# 初始化日志
logger = get_logger(__name__)

def create_app():
    """应用工厂函数"""
    app = Flask(__name__)
    
    # 加载配置
    app.config.from_object(Config)
    
    # 启用CORS
    CORS(app)
    
    # 使用自定义session接口解决Flask 3.1.1兼容性问题
    app.session_interface = CustomSessionInterface()
    
    # 初始化数据库
    init_database(app)
    
    # 在开发环境创建测试用户
    if app.debug:
        with app.app_context():
            create_test_user()
    
    # 在SQLAlchemy初始化后导入蓝图，避免循环导入
    from auth_routes import auth_bp
    from admin_routes import admin_bp
    from routes.api_routes import api_bp
    from routes.agent_routes import agent_bp
    from routes.user_routes import user_bp
    
    # 注册蓝图
    app.register_blueprint(auth_bp)
    app.register_blueprint(admin_bp)
    app.register_blueprint(api_bp)
    app.register_blueprint(agent_bp)
    app.register_blueprint(user_bp)
    
    # 主页路由
    @app.route('/')
    def index():
        """主页面"""
        logger.info("用户访问主页面")
        from flask import render_template
        return render_template('index.html')
    
    # 在应用创建后立即执行自动初始化
    with app.app_context():
        auto_initialize_service(app)
    
    return app


# 自动初始化功能
def auto_initialize_service(app):
    """服务启动时自动初始化代理实例"""
    try:
        # 检查是否启用自动初始化
        auto_init = os.environ.get('AUTO_INITIALIZE', 'false').lower() == 'true'
        if not auto_init:
            logger.info("自动初始化已禁用")
            return

        # 获取配置参数
        api_key = os.environ.get('API_KEY')
        base_url = os.environ.get('BASE_URL', '').strip()
        default_model = os.environ.get('DEFAULT_MODEL', 'claude-sonnet-4-20250514')
        data_path = os.environ.get('DATA_PATH', '/Users/liuxiansen/PycharmProjects/Biomni/data')

        # 验证必要参数
        if not api_key or api_key == 'your_api_key_here':
            logger.warning("自动初始化失败：未配置有效的API_KEY")
            return

        # 验证数据路径
        if not os.path.exists(data_path):
            logger.warning(f"自动初始化失败：数据路径不存在 {data_path}")
            return

        # 导入并使用agent_service进行自动初始化
        from services.agent_service import agent_service
        session_id = agent_service.auto_initialize_service()
        
        if session_id:
            # 存储默认配置供后续使用
            app.config['DEFAULT_SESSION_ID'] = session_id
            app.config['API_KEY'] = api_key
            app.config['BASE_URL'] = base_url
            app.config['DEFAULT_MODEL'] = default_model
            app.config['DEFAULT_DATA_PATH'] = data_path
            
            logger.info(f"服务自动初始化成功 - 模型: {default_model}, 会话ID: {session_id}")
        else:
            logger.warning("自动初始化失败")

    except Exception as e:
        logger.error(f"自动初始化失败: {str(e)}", exc_info=True)

# 创建应用实例
app = create_app()


if __name__ == '__main__':
    logger.info("启动Biomni应用服务器")
    
    # 移除重复的自动初始化调用（已在create_app中执行）
    
    # 从环境变量获取Flask运行配置
    debug_mode = os.environ.get('FLASK_DEBUG', 'True').lower() == 'true'
    host = os.environ.get('FLASK_HOST', '0.0.0.0')
    port = int(os.environ.get('FLASK_PORT'))

    app.run(debug=debug_mode, host=host, port=port)
